package pe.gob.osce.sirenas.wd.util.reporte;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import pe.gob.osce.sirenas.model.reporte.DataReporteDTO;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRRewindableDataSource;

public class ReporteConsolidadoDS implements JRDataSource,JRRewindableDataSource, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/** Lista para el detalle del reporte. */
	private List listaDetalle = new ArrayList();
	/** Index del registro. */
	private int indexDetalle = -1;
	/** Formato de fecha */
	SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/M/yyyy"); 
	

	public ReporteConsolidadoDS(List listaDetalle) {
		this.listaDetalle = listaDetalle;
	}

	/**
	 * Método que llama el jasper para verificar si existen más elementos en la lista.
	 * @return bnext  retorna un valor de tipo Boolean, tipo boolean.
	 * @throws JRException manejador de excepciones.
	 */
	public boolean next() throws JRException {
		indexDetalle++;
		boolean bnext = (listaDetalle != null && indexDetalle < listaDetalle
				.size());
		return bnext;
	}


	/**
	 * Método que llama el jasper en cada fila para obtener el valor de la etiqueta.
	 * @param field nombre de la etiqueta en el jasper, tipo JRField.
	 * @return value valor de la etiqueta, tipo Object.
	 * @throws JRException manejador de excepciones.
	 */
	public Object getFieldValue(JRField field) throws JRException {
		
		Object value = null;
		String fieldName = field.getName();
		DataReporteDTO object = (DataReporteDTO) listaDetalle.get(indexDetalle);
		
		if ("F_NUM_FICHA".equals(fieldName)) {
			if(object.getNumFicha()!=null)
				value = object.getNumFicha();
			else
				value = "";
		}else if("F_MODALIDAD".equals(fieldName)) {
			if(object.getModalidadArbitro()!=null)
				value = object.getModalidadArbitro();
			else
				value = "";
		}else if("F_MODALIDAD_FEC".equals(fieldName)) {
			if(object.getFechaModalidad()!=null )
				value = formatoFecha.format(object.getFechaModalidad());
			else
				value = "";
		}else if ("F_CANT_ESPECIALIDAD".equals(fieldName)) {
			if(object.getCantidadAcreditaciones()!=null )
				value = object.getCantidadAcreditaciones().toString();
			else
				value = "";
		}else if ("F_AP_PATERNO".equals(fieldName)) {
			if(object.getApPaterno()!=null ) {
				value = object.getApPaterno();
			} else
				value = "";
		}else if ("F_AP_MATERNO".equals(fieldName)) {
			if(object.getApMaterno()!=null ) {
				value = object.getApMaterno();
			} else
				value = "";
		}else if ("F_NOMBRES".equals(fieldName)) {
			if(object.getNombres()!=null ) {
				value = object.getNombres();
			} else
				value = "";
		}else if ("F_EDAD".equals(fieldName)) {
			if(object.getEdad()!=null ) {
				value = ""+object.getEdad();
			} else
				value = "";
		}else if ("F_NACIMIENTO".equals(fieldName)) {
			if(object.getFecNacimiento()!=null ) {
				value = formatoFecha.format(object.getFecNacimiento());
			} else
				value = "";
		}else if ("F_TIPO_DOC".equals(fieldName)) {
			if(object.getTipoDocumento()!=null ) {
				value = object.getTipoDocumento();
			} else
				value = "";
		}else if ("F_DOCUMENTO".equals(fieldName)) {
			if(object.getNumDocumento()!=null ) {
				value = object.getNumDocumento();
			} else
				value = "";
		}else if ("F_RUC".equals(fieldName)) {
			if(object.getNumRuc()!=null ) {
				value = object.getNumRuc().toString();
			} else
				value = "";
		}else if ("F_CANT_FORMACION".equals(fieldName)) {
			if(object.getCantidadFormacion()!=null )
				value = object.getCantidadFormacion().toString();
			else
				value = "";
		}
		
		return value;
	}

	
	/**
	 * Metodo que permite obtener listaDetalle.
	 * @return listaDetalle , tipo List.
	 */
	public List getListaDetalle() {
		return listaDetalle;
	}

	/**
	 * Permite actualizar listaDetalle.
	 * @param listaDetalle, tipo List.
	 */
	public void setListaDetalle(List listaDetalle) {
		this.listaDetalle = listaDetalle;
	}

	/**
	 * Metodo que permite obtener indexDetalle.
	 * @return indexDetalle , tipo int.
	 */
	public int getIndexDetalle() {
		return indexDetalle;
	}

	/**
	 * Permite actualizar indexDetalle.
	 * @param indexDetalle, tipo int.
	 */
	public void setIndexDetalle(int indexDetalle) {
		this.indexDetalle = indexDetalle;
	}

	/**
	 * Metodo que permite obtener formatoFecha.
	 * @return formatoFecha , tipo SimpleDateFormat.
	 */
	public SimpleDateFormat getFormatoFecha() {
		return formatoFecha;
	}

	/**
	 * Permite actualizar formatoFecha.
	 * @param formatoFecha, tipo SimpleDateFormat.
	 */
	public void setFormatoFecha(SimpleDateFormat formatoFecha) {
		this.formatoFecha = formatoFecha;
	}

	@Override
	public void moveFirst() throws JRException {
		// TODO Auto-generated method stub
		this. indexDetalle = -1;
	}


	
}
